﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1_server
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: 这行代码将数据加载到表“bigdataDataSet.Data_”中。您可以根据需要移动或移除它。
            this.data_TableAdapter.Fill(this.bigdataDataSet.Data_);

        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 输入验证
            if (string.IsNullOrWhiteSpace(textBox1.Text))
            {
                MessageBox.Show("请输入查询内容！", "输入提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            try
            {
                // 使用参数化查询防止SQL注入
                string sql = "SELECT * FROM Data_ WHERE 班级 LIKE @SearchTerm";

                // 连接字符串配置（生产环境建议存储在配置文件中）
                string connectionString = @"Data Source=172.16.250.176;
                                    Initial Catalog=bigdata;
                                    User ID=sa;
                                    Password=Lyxx@12345;
                                    Encrypt=True;
                                    TrustServerCertificate=True;";

                // 使用using语句自动释放资源
                using (SqlConnection conn = new SqlConnection(connectionString))
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    // 添加参数化查询
                    cmd.Parameters.AddWithValue("@SearchTerm", $"%{textBox1.Text.Trim()}%");

                    // 创建数据适配器和数据集
                    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                    {
                        DataSet ds = new DataSet();
                        da.Fill(ds);

                        // 数据绑定处理
                        if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                        {
                            dataGridView1.DataSource = ds.Tables[0];
                        }
                        else
                        {
                            MessageBox.Show("未找到匹配的记录", "查询结果", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            dataGridView1.DataSource = null;  // 清空数据视图
                        }
                    }
                }
            }
            catch (SqlException ex)
            {
                // 专门处理数据库异常
                MessageBox.Show($"数据库操作失败：\n错误代码：{ex.Number}\n错误信息：{ex.Message}",
                                "数据库错误",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                // 通用异常处理
                MessageBox.Show($"操作发生错误：{ex.Message}",
                                "系统错误",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                // 全表查询语句（无过滤条件）
                string sql = "SELECT * FROM Data_";

                // 连接字符串配置（生产环境建议存储在配置文件中）
                string connectionString = @"Data Source=172.16.250.176;
                                    Initial Catalog=bigdata;
                                    User ID=sa;
                                    Password=Lyxx@12345;
                                    Encrypt=True;
                                    TrustServerCertificate=True;";

                // 使用using语句自动释放资源
                using (SqlConnection conn = new SqlConnection(connectionString))
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    DataSet ds = new DataSet();
                    da.Fill(ds);

                    // 数据绑定处理
                    if (ds.Tables.Count > 0)
                    {
                        dataGridView1.DataSource = ds.Tables[0];
                        dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; // 自动调整列宽
                    }
                    else
                    {
                        dataGridView1.DataSource = null;
                        MessageBox.Show("表中没有数据", "查询结果",
                                      MessageBoxButtons.OK,
                                      MessageBoxIcon.Information);
                    }
                }
            }
            catch (SqlException ex)
            {
                // 数据库异常处理
                string errorMessage = $"数据库操作失败：\n错误代码：{ex.Number}\n错误类型：{GetSqlExceptionType(ex)}\n错误信息：{ex.Message}";
                MessageBox.Show(errorMessage, "数据库错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                // 通用异常处理
                MessageBox.Show($"操作发生错误：{ex.Message}",
                              "系统错误",
                              MessageBoxButtons.OK,
                              MessageBoxIcon.Error);
            }
        }

        // 辅助方法：获取更易读的异常类型描述
        private string GetSqlExceptionType(SqlException ex)
        {
            switch (ex.Number)
            {
                case 208: return "表不存在";
                case 4060: return "数据库登录失败";
                case 547: return "外键约束冲突";
                case 2627: return "唯一键冲突";
                default: return "数据库操作错误";
            }
        }
    }
}
